package controllers

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"gorm.io/gorm"
	"main.go/database"
	"net/http"
	"project/model"
)
//查找
func find_car(db *gorm.DB, request model.car) bool {
	var car model.car
	db.Where("car_id = ?", request.car_id).First(&car)
	if car.car_id != "" {
		fmt.Println("查找成功")
		return true
	}
	fmt.Println("查找失败")
	return false
}

//插入
func insert_car(db *gorm.DB, request model.car) bool {
	if find_car(db, request) == true {
		fmt.Println("该车已存在，不能插入")
		return false
	}
	db.Create(&request) //创建一个元组
	fmt.Println("插入成功")
	return true
}

//删除
func delete_car(db *grom.DB, request model.car) bool {
	if find_car(db, request) == false {
		fmt.Println("不存在该车，无法删除")
		return false
	}
	db.Where("car_id = ?", request.car_id).Delete(&request)
	fmt.Println("删除成功")
	return true
}

//更新
func update_car(db *grom.DB, request model.car) bool {
	if find_car(db, request) == false {
		fmt.Println("无该车，无法更新")
		return false
	}
	db.Model(&request).Where("car_id = ?", request.car_id).Updates(
		model.car{
			car_id : request.car_id
			car_goods_id  : request.car_goods_id
			car_goods_company_name  : request.car_goods_company_name
		},
	)
	fmt.Println("更新成功")
	return true
}
//在网页显示car所以信息
func web_show_car(c *gin.Context) {
	db := database.GetDB()
	var car []model.car //结构体数组
	// 显示所有的采购明细信息
	result := db.Table("car").Find(&car)
	if result != nil {
		fmt.Println("!!")
	}
	fmt.Println(car)
	c.JSON(http.StatusOK, gin.H{ //多传一些参数 可能会用到
		"code":             "200",
		"car": 				car, //试试传一个列表
		"msg":              "成功",
	})
}
//查找某一指定car信息(网页)
func web_get_car(c *gin.Context) {
	db := common.GetDB()
	var car1 model.car
	var car2 model.car
	request := make(map[string]interface{}) //新建一个map类型的变量request，保存前端传来的数据
	//获取参数
	fmt.Println(request)
	c.ShouldBind(&request) //将前端传过来的数据绑定到该request上
	car1.car_id = request["id"].(string) //取得相应的map值 放到结构体上
	// 查询采购明细是否存在(链接数据库查)
	db.Where("car_id = ?", car1.car_id).First(&car2)
	if car2.car_id != "" {
		fmt.Println("成功查找到车")
		c.JSON(200, gin.H{
			"code":             "200",
			"purchase_details": car2, //传一个对象
			"msg":              "成功",
		})
	} else {
		c.JSON(404, gin.H{
			"code":             "404",
			"car_id": 			car2, //传一个空对象
			"msg":              "no",
		})
		fmt.Println("未找到该车")
	}
}
//增加car（页面用）
func web_add_car(c *gin.Context) {
	db := database.GetDB()
	request := make(map[string]interface{}) //新建一个map类型的变量request，保存前端传来的数据
	c.ShouldBind(&request)                  //将前端传过来的数据绑定到该request上
	var car model.car
	//获取前端的要增加的car的属性
	car.car_id = request["car_id"].(string)
	car.car_goods_id = request["car_goods_id"].(string)
	car.car_goods_company_name = request["car_goods_company_name"].(string)
	fmt.Println(request)
	//获取到新增采购明细的所有信息
	if insert_car(db, car) {
		//没找到，可以新建该采购明细
		c.JSON(200, gin.H{
			"code": "200",
			"msg":  "添加成功",
		})
		fmt.Println("添加成功")
	} else {
		//能找到，就不可以新建该采购明细
		c.JSON(404, gin.H{
			"code": "404",
			"msg":  "添加失败",
		})
		fmt.Println("添加失败")
	}
}
//删除指定car（页面用）
func web_delete_car(c *gin.Context) {
	db := database.GetDB()
	request := make(map[string]interface{}) //新建一个map类型的变量request，保存前端传来的数据
	c.ShouldBind(&request)                  //将前端传过来的数据绑定到该request上
	var car model.car
	car.car_id = request["car_id"].(string) //获取前端的要删除的采购明细的id
	if delete_car(db, car) {
		//删除成功
		c.JSON(200, gin.H{
			"code": "200",
			"msg":  "删除成功",
		})
		fmt.Println("删除成功")
	} else {
		//删除失败
		c.JSON(404, gin.H{
			"code": "404",
			"msg":  "删除失败",
		})
		fmt.Println("删除失败")
	}
}

//修改指定car（页面用）
func web_update_car(c *gin.Context) {
	db := database.GetDB()
	request := make(map[string]interface{}) //新建一个map类型的变量request，保存前端传来的数据
	c.ShouldBind(&request)                  //将前端传过来的数据绑定到该request上
	var car model.car
	car.car_id = request["car_id"].(string)
	car.car_goods_id = request["car_goods_id"].(string)
	car.car_goods_company_name = request["car_goods_company_name"].(string)
	//获取到全部修改信息

	if update_car(db, car) {
		c.JSON(200, gin.H{
			"code": "200",
			"msg":  "删除成功",
		})
	} else {
		c.JSON(404, gin.H{
			"code": "404",
			"msg":  "删除失败",
		})
	}
}